package com.infore.dataAudit.service;

import java.io.InputStream;
import java.util.Map;

import org.activiti.engine.ActivitiObjectNotFoundException;

import com.infore.dataAudit.util.ResultEntity;



/**
 * 流程示例运行相关接口
 * 
 * @author cys
 *
 */
public interface RunningTimeService {

    /**
     * 启动新流程实例
     * 
     * @param key
     *            流程key
     * @param param
     *            全局流程变量
     * @return 成功时返回data为processInstance id
     */
    ResultEntity startProcess(String key, Map<String, Object> param);
    /**
     * 启动新流程实例
     * 
     * @param key
     *            流程key
     * @param param
     *            全局流程变量
     * @param businessKey 业务主键
     * @return 成功时返回data为processInstance id
     */
    ResultEntity startProcess(String key, String businessKey, Map<String, Object> param);

    /**
     * 根据key停止流程实例
     * 
     * @param key
     *            实例主键
     * @param reason
     *            删除原因
     * @return
     * @throws ActivitiObjectNotFoundException
     *             当未找到该主键对应的实例时抛出
     */
    ResultEntity stopProcessByKey(String key, String reason) throws ActivitiObjectNotFoundException;


    /**
     * 挂起一个流程实例
     * 
     * @author cys
     * @return ResultUtil
     * @param processInstanceId
     * @date 2017年12月28日下午1:37:02
     */
    ResultEntity suspendProcess(String processInstanceId);

    /**
     * 激活一个流程
     * 
     * @author cys
     * @return ResultUtil
     * @param processInstanceId
     * @date 2017年12月28日下午1:43:36
     */
    ResultEntity activeProcess(String processInstanceId);

    /**
     * 生成流程图
     * 
     * @author cys
     * @return InputStream
     * @param processInstanceId
     * @date 2018年3月19日上午11:35:04
     */
    InputStream generateDiagram(String processInstanceId);

    /**
     * 生成流程图
     * 
     * @author cys
     * @return InputStream
     * @param deployKey
     * @date 2018年3月19日上午11:35:18
     */
    InputStream generateDiagramByDeployKey(String deployKey);
    /**
     * 开始流程 开始成功则返回值的data为流程实例id
     * 
     * @author cys
     * @return ResultUtil
     * @param key
     * @param businessKey
     * @param authenticatedUserId
     * @param param
     * @date 2018年8月27日下午3:22:26
     */
    ResultEntity startProcess(String key, String businessKey, String authenticatedUserId, Map<String, Object> param);

}
